Kubernetes quick start или первый старт на bare metal (Установка на vps/vds)

Kubernetes набирает популярность уже не только больших компаний, но и средних. Для первичного ознакомления рекомендуем доклад Дмитрия Столярова (компания Flant) “Наш опыт с Kubernetes в небольших проектах”

Мы после просмотра доклада поймали себя на мысли, что это про Нас и на 80-90процентов описывает нашу ситуацию. Пришло время как минимум познакомиться с инструментом. Kubernetes забирает на себя часть задач решаемых ранее такими инструментами как chef/puppet/ansible или capistrano. Кубернетес предоставляет новый уровень абстракции позволяющей унифицировать возможность запуска приложений без привязки к вендору облаков или на своих серверных мощностях. Вы можете использовать гибридные модели, когда ядро системы находится на своих мощностях, а облака подключаются в пики.

При использование kubernetes меняются подходы в работе над приложением, но об этом мы поговорим в другой раз. В этой заметке мы выполним ручную установку с использованием такого инструмента как kubeadm

Создадим 2 vds сервера на нашем любимом хостинге

  • Память: 4 GB
  • Процессор: 2 core
  • Диск: 80 GB, SSD
  • Трафик: безлимитный
С операционной системой Centos7 64bit

Устанавливаем докер для работы кубернетес (k8s)

wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
yum install -y docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm

mkdir -p /etc/docker && touch /etc/docker/daemon.json
cat << EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl enable docker && systemctl start docker


Важно - выставить cgroupdriver единый для кубернетес и docker. В centos7 это systemd, а в ubuntu 16 - cgroupfs

Переходим к установки компонентов kubernetes

Подключаем репозиторий и устанавливаем kubelet kubeadm kubectl
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

setenforce 0
yum install -y kubelet kubeadm kubectl

cat <  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

systemctl enable kubelet && systemctl start kubelet

Выполним инициализацию нашего кластера и мастер ноды

kubeadm init --pod-network-cidr=192.168.0.0/16
Параметр --pod-network-cidr=192.168.0.0/16 важен для обеспечения работы виртуальной локальной сети с плагином calico. Calico - первый plugin сети - что завелся без танцев с бубном. Вы можете выбрать любой из списка и внимательно изучить документацию
  • Calico
  • Canal
  • Flannel
  • Kube-router
  • Romana
  • Weave Net

После инициализации команда выдаст строку для подключения новых нод

  kubeadm join --token ******** 85.143.174.5:6443 --discovery-token-ca-cert-hash sha256:***********

Настроим доступ для пользователя root и авторизацию для kubectl. Не рекомендуются вести работу с кластером на уровне root. Мы сознательно отойдем от данной рекомендации, для упрощения запуска на первом этапе изучения.
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Выполняем первую команду по инициализации сети
kubectl apply -f https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
После запуска команды в кластере начнется настройка компонентов сети. Проверить готовность кластера к работе можно командой
Признаком - что все прошло без сбоев является колонка READY где числа до и после слеша равны
kubectl get pods --all-namespaces
NAMESPACE     NAME                                            READY     STATUS    RESTARTS   AGE
kube-system   calico-etcd-4hb29                               1/1       Running   2          7h
kube-system   calico-kube-controllers-d669cc78f-865m6         1/1       Running   3          7h
kube-system   calico-node-hp625                               2/2       Running   9          7h
kube-system   etcd-171145.simplecloud.ru                      1/1       Running   3          7h
kube-system   kube-apiserver-171145.simplecloud.ru            1/1       Running   3          7h
kube-system   kube-controller-manager-171145.simplecloud.ru   1/1       Running   3          7h
kube-system   kube-dns-6f4fd4bdf-qjw8l                        3/3       Running   0          7h
kube-system   kube-proxy-h2dbd                                1/1       Running   3          7h
kube-system   kube-scheduler-171145.simplecloud.ru            1/1       Running   3          7h
Важно: - минимальные требования для запуска kubernetes + calico
  • 2CPU
  • 2GB RAM
  • 10GB free disk space
  • RedHat Enterprise Linux 7.x+, CentOS 7.x+, Ubuntu 16.04+, or Debian 8.x+

Если все прошло без сбоев - то мы получили мастер ноду готовую к работе и присоединению рабочих нод. Для возможности запуска приложений и контейнеров на master мы должны выполнить команду

kubectl taint nodes --all node-role.kubernetes.io/master-
Проверяем работу нашего кластера из 1 машины
kubectl get nodes
NAME                    STATUS    ROLES     AGE       VERSION
171145.simplecloud.ru   Ready     master    8h        v1.9.3
Запускать приложения и работать с кластером можно в такой минимальной установке. Для полноты эксперимента мы созданим и подключим еще одну ноду(сервер) к кластеру и выполним свой первый deploy с помощью kubernetes.

Для настройки ноды мы повторяем все шаги до команды включительно


systemctl enable kubelet && systemctl start kubelet

Подключаем ноду к кластеру командой выданной нам мастером при инициализации
Внимание!!! у Вас строка будет отличатся

kubeadm join --token cfdc4d.250ac09289a3bc17 85.143.174.5:6443 --discovery-token-ca-cert-hash sha256:790770d3d3f2a96fcc6bd735786473aeac7cdb203926bd1b36d6506a66a986b8

На мастре проверить корректность работы можно командой


kubectl get nodes

NAME                    STATUS     ROLES     AGE       VERSION
171145.simplecloud.ru   Ready      master    9h        v1.9.3
171249.simplecloud.ru   NotReady       6s        v1.9.3

Первый деплой в kuberneres

Запуск кластера - ради запуска кластера имеет мало пользы. Тк на данный момент мы только изучаем кубернетес и не имеем достаточно знаний для запуска своих проектов, мы запустим демку с магазином носков.

#создадим пространство имен sock-shop
kubectl create namespace sock-shop
# выполним деплой в namespace sock-shop
kubectl apply -n sock-shop -f "https://raw.githubusercontent.com/microservices-demo/microservices-demo/master/deploy/kubernetes/complete-demo.yaml"

Посмотреть состояние подов можно командой
kubectl get pods -n sock-shop
Как только все поды перейдут в состояние READY 1/1 - наш магазин успешно запущен в нашем облаке из облачных серверов.
NAME                            READY     STATUS    RESTARTS   AGE
carts-74f4558cb8-4c6z5          1/1       Running   0          10m
carts-db-7fcddfbc79-z67k8       1/1       Running   0          10m
catalogue-676d4b9f7c-jfj24      1/1       Running   0          10m
catalogue-db-5c67cdc8cd-s54mm   1/1       Running   0          10m
front-end-977bfd86-82kpj        1/1       Running   0          10m
orders-787bf5b89f-rm7gj         1/1       Running   0          10m
orders-db-775655b675-gztk8      1/1       Running   0          10m
payment-75f75b467f-wj47s        1/1       Running   0          10m
queue-master-5c86964795-6sxmw   1/1       Running   0          10m
rabbitmq-96d887875-nz2hv        1/1       Running   0          10m
shipping-5bd69fb4cc-6gvdq       1/1       Running   0          10m
user-5bd9b9c468-xqf8c           1/1       Running   0          10m
user-db-5f9d89bbbb-kpr94        1/1       Running   0          10m
 
Работу магазина можно проверить в браузере используя любой IP:30001 адрес нашего кластера. Например http://85.143.174.5:30001/

Увеличить - kubernetes установка
Вам может понравиться